iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Python

一些Python可以做的事系列 第 23

[Python] 電腦攝像頭錄影

  • 分享至 

  • xImage
  •  

這篇要來學習如何打開電腦攝像頭進行錄影

使用 opencv 內的 VideoWriter() 方法

使用 VideoWriter() 方法,可以建立一個空的「影片檔」,將擷取到的影像圖片組成新的串流格式,寫入空的影片檔案裡,完成後就會儲存成新為新的影片

步驟

  1. 使用 cv2.VideoCapture() 方法來讀取電腦攝影機的影像。
  2. 使用 cap.get() 方法在讀取影像後,取得影片的寬度和高度。
  3. 使用 cv2.VideoWriter_fourcc() 方法設定影片的編碼格式。
  4. 使用 cv2.VideoWriter() 方法創建一個空的影片檔案,並設定格式、幀率(fps)以及影片的長寬尺寸。
  5. 在 while 迴圈中,使用 out.write() 方法將捕捉到的每一幀影像寫入影片檔案中。
  6. 最後,使用 out.release() 方法釋放資源。

程式碼

import cv2  # 引入 OpenCV 庫

# 開啟電腦的攝影機鏡頭並建立一個 VideoCapture 物件,參數 0 代表使用第一個攝影機
cap = cv2.VideoCapture(0)

# 使用 cap.get() 方法取得攝影機影像的寬度和高度,這些數值將用來設定影片的解析度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    # 取得影像的寬度(像素數)
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 取得影像的高度(像素數)

# 使用 cv2.VideoWriter_fourcc() 設定影片的格式,這裡使用 'MJPG' 編碼
# fourcc 是一個 4 字元的編碼,用來指定影片的壓縮格式
fourcc = cv2.VideoWriter_fourcc(*'MJPG')          

# 使用 cv2.VideoWriter() 創建一個 VideoWriter 物件,來寫入影片
# 參數依次為:輸出影片檔名、編碼格式、幀率(每秒幀數)、影片的解析度(寬度,高度)
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (width, height))

# 檢查攝影機是否成功開啟
if not cap.isOpened():
    print("Cannot open camera")  # 如果攝影機未成功開啟,打印錯誤訊息並退出程式
    exit()

# 進入主迴圈,用來不斷捕捉影像並將其寫入影片檔案
while True:
    # 讀取攝影機的每一幀影像,ret 表示讀取是否成功,frame 是讀取到的影像
    ret, frame = cap.read()
    
    # 如果讀取失敗,打印錯誤訊息並退出迴圈
    if not ret:
        print("Cannot receive frame (stream end?)")  # 捕捉不到影像時提示
        break

    # 使用 out.write() 方法將每一幀影像寫入先前創建的影片檔案
    out.write(frame)       

    # 顯示當前的影像,視窗名稱為 'cameraview'
    cv2.imshow('cameraview', frame)

    # 等待使用者按下 e 鍵,如果按下則退出迴圈
    if cv2.waitKey(1) == ord('e'):
        break

# 迴圈結束後釋放攝影機和影片寫入物件的資源
cap.release()  # 釋放攝影機資源
out.release()  # 釋放影片寫入物件資源

# 關閉所有 OpenCV 開啟的視窗
cv2.destroyAllWindows()

參考資料 :
https://steam.oxxostudio.tw/category/python/ai/opencv-write-video.html#google_vignette


上一篇
[python] 麥克風錄音
下一篇
[Python] 檔案操作
系列文
一些Python可以做的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言